#1 编写一个Python函数，用于计算一个数字(非负整数)的阶乘。函数接受数字作为参数
#2 编写一个Python函数，该函数将一个数字作为参数，并检查该数字是否为素数(返回True or False)
#3 编写一个Python函数，检查传递的字符串是否回文。

#1.
def fact1(n):
    return 1 if n < 2 else fact1(n-1)*n

def fact2(n):
    if n == 1:
        return 1
    else:
        a = 1
        for i in range(2,n+1):
            a = a * i
        return a

import datetime,functools,time
def logger(fn):
    @functools.wraps(fn)
    def wrapper(*args,**kwargs):
        start = datetime.datetime.now()
        ret = fn(*args,**kwargs)
        duration = datetime.datetime.now() - start
        print("exectime {}s".format(duration.total_seconds()))
        return ret
    return wrapper

@logger
def fact1(n):
    return 1 if n < 2 else fact1(n-1)*n

@logger
def fact2(n):
    if n == 1:
        return 1
    else:
        a = 1
        for i in range(2,n+1):
            a = a * i
        return a

print(fact1(20),fact1.__name__)
print(fact1(20),fact2.__name__)

#2
import math
def prime(n:int):
    if n == 1:
        return False
    else:
        for i in range(2,int(math.sqrt(n)+1)):
            if n % i == 0:
                return False
        else:
            return True

prime.__annotations__
prime(29)

#3.
def palindrome(x):
    num = str(x)
    for i in range(len(num)//2):
        if num[i] != num[-i-1]:
            print("{} not a palindrome".format(nm))
            break
    else:
        print("{} is a palindrome".format(num))

palindrome(12321)
palindrome(12421)
palindrome(1221)

# 66行是不是写的有点问题？nm是什么？




